package response

import (
	"websshop/app/utils/page"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
	"github.com/gogf/gf/util/gconv"
)

// 标准返回结果数据结构封装。
// 返回固定数据结构的JSON:
// code:  状态码(0:成功, 1:失败, >1:错误码);
// msg:  请求结果信息;
// data: 请求结果,根据不同接口返回结果的数据结构不同;
func Json(r *ghttp.Request, code int, msg string, data ...interface{}) {
	responseData := interface{}(nil)
	if len(data) > 0 {
		responseData = data[0]
	}
	r.Response.WriteJson(g.Map{
		"code": code,
		"msg":  msg,
		"data": responseData,
	})
}

// 返回JSON数据并退出当前HTTP执行函数。
func JsonExit(r *ghttp.Request, code int, msg string, data ...interface{}) {
	Json(r, code, msg, data...)
	r.Exit()
}

//分页列表响应
func PageList(r *ghttp.Request, content interface{}, page *page.HttpPage) {
	data := g.Map{
		"content": content,
	}

	if page != nil {
		page.PageMapPack(&data)
	}

	JsonExit(r, 0, "ok", data)
}

func NotFound(r *ghttp.Request, msg string) {
	if msg == "" {
		msg = "404 Not Found"
	}

	r.Response.Status = 404
	r.Response.WritelnExit(msg)
}

// 返回受影响的行数
func RowsAffected(r *ghttp.Request, rowsAffected int64) {
	JsonExit(r, 0, "ok", g.Map{
		"rows_affected": rowsAffected,
	})
}

// 统一返回 422 error
func ErrorMsg(r *ghttp.Request, msg string) {
	JsonExit(r, 422, msg)
}

func Error(r *ghttp.Request, err error) {
	JsonExit(r, 422, err.Error())
}

func SuccessMsg(r *ghttp.Request,msg string, data interface{} )  {
	JsonExit(r, 200, msg,data)
}

func Success(r *ghttp.Request, data interface{})  {
	msgStr := "操作成功！"
	JsonExit(r, 200, msgStr,data)
}

func Created(r *ghttp.Request, data interface{}) {
	JsonExit(r, 0, "ok", data)
}

func MapExclude(r *ghttp.Request, data interface{}, fields ...string) {
	m := gconv.Map(data)
	for _, s := range fields {
		delete(m, s)
	}
	JsonExit(r, 0, "ok", m)
}
